home *** CD-ROM | disk | FTP | other *** search
- /*
- * tkCanvas.h --
- *
- * Declarations shared among all the files that implement
- * canvas widgets.
- *
- * Copyright 1991-1992 Regents of the University of California.
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, provided that the above copyright
- * notice appear in all copies. The University of California
- * makes no representations about the suitability of this
- * software for any purpose. It is provided "as is" without
- * express or implied warranty.
- *
- * $Header: /user6/ouster/wish/RCS/tkCanvas.h,v 1.14 92/08/19 08:34:16 ouster Exp $ SPRITE (Berkeley)
- */
-
- #ifndef _TKCANVAS
- #define _TKCANVAS
-
- #ifndef _TK
- #include "tk.h"
- #endif
-
- /*
- * For each item in a canvas widget there exists one record with
- * the following structure. Each actual item is represented by
- * a record with the following stuff at its beginning, plus additional
- * type-specific stuff after that.
- */
-
- #define TK_TAG_SPACE 3
-
- typedef struct Tk_Item {
- int id; /* Unique identifier for this item
- * (also serves as first tag for
- * item). */
- struct Tk_Item *nextPtr; /* Next in display list of all
- * items in this canvas. Later items
- * in list are drawn on top of earlier
- * ones. */
- Tk_Uid staticTagSpace[TK_TAG_SPACE];/* Built-in space for limited # of
- * tags. */
- Tk_Uid *tagPtr; /* Pointer to array of tags. Usually
- * points to staticTagSpace, but
- * may point to malloc-ed space if
- * there are lots of tags. */
- int tagSpace; /* Total amount of tag space available
- * at tagPtr. */
- int numTags; /* Number of tag slots actually used
- * at *tagPtr. */
- struct Tk_ItemType *typePtr; /* Table of procedures that implement
- * this type of item. */
- int x1, y1, x2, y2; /* Bounding box for item, in integer
- * canvas units. Set by item-specific
- * code and guaranteed to contain every
- * pixel drawn in item. Item area
- * includes x1 and y1 but not x2
- * and y2. */
-
- /*
- *------------------------------------------------------------------
- * Starting here is additional type-specific stuff; see the
- * declarations for individual types to see what is part of
- * each type. The actual space below is determined by the
- * "itemInfoSize" of the type's Tk_ItemType record.
- *------------------------------------------------------------------
- */
- } Tk_Item;
-
- /*
- * The record below describes a canvas widget. It is made available
- * to the item procedures so they can access certain shared fields such
- * as the overall displacement and scale factor for the canvas.
- */
-
- typedef struct {
- Tk_Window tkwin; /* Window that embodies the canvas. NULL
- * means that the window has been destroyed
- * but the data structures haven't yet been
- * cleaned up.*/
- Tcl_Interp *interp; /* Interpreter associated with canvas. */
- Tk_Item *firstItemPtr; /* First in list of all items in canvas,
- * or NULL if canvas empty. */
- Tk_Item *lastItemPtr; /* Last in list of all items in canvas,
- * or NULL if canvas empty. */
-
- /*
- * Information used when displaying widget:
- */
-
- int borderWidth; /* Width of 3-D border around window. */
- Tk_3DBorder bgBorder; /* Used for canvas background. */
- XColor *bgColor; /* Color used for clearing to background. */
- int relief; /* Indicates whether window as a whole is
- * raised, sunken, or flat. */
- GC pixmapGC; /* Used to copy bits from a pixmap to the
- * screen and also to clear the pixmap. */
- int width, height; /* Dimensions to request for canvas window,
- * specified in pixels. */
- int redrawX1, redrawY1; /* Upper left corner of area to redraw,
- * in pixel coordinates. Border pixels
- * are included. Only valid if
- * REDRAW_PENDING flag is set. */
- int redrawX2, redrawY2; /* Lower right corner of area to redraw,
- * in pixel coordinates. Border pixels
- * will *not* be redrawn. */
- int confine; /* Non-zero means constrain view to keep
- * as much of canvas visible as possible. */
-
- /*
- * Information used to manage and display selection:
- */
-
- Tk_3DBorder selBorder; /* Border and background for selected
- * characters. */
- int selBorderWidth; /* Width of border around selection. */
- XColor *selFgColorPtr; /* Foreground color for selected text. */
- Tk_Item *selItemPtr; /* Pointer to selected item. NULL means
- * selection isn't in this canvas. */
- int selectFirst; /* Index of first selected character. */
- int selectLast; /* Index of last selected character. */
- Tk_Item *anchorItemPtr; /* Item corresponding to "selectAnchor":
- * not necessarily selItemPtr. */
- int selectAnchor; /* Fixed end of selection (i.e. "select to"
- * operation will use this as one end of the
- * selection). */
-
- /*
- * Information for display insertion cursor in text:
- */
-
- Tk_3DBorder cursorBorder; /* Used to draw vertical bar for insertion
- * cursor. */
- int cursorWidth; /* Total width of insertion cursor. */
- int cursorBorderWidth; /* Width of 3-D border around insert cursor. */
- int cursorOnTime; /* Number of milliseconds cursor should spend
- * in "on" state for each blink. */
- int cursorOffTime; /* Number of milliseconds cursor should spend
- * in "off" state for each blink. */
- Tk_TimerToken cursorBlinkHandler;
- /* Timer handler used to blink cursor on and
- * off. */
- Tk_Item *focusItemPtr; /* Item that currently has the input focus,
- * or NULL if no such item. */
-
- /*
- * Transformation applied to canvas as a whole: to compute screen
- * coordinates (X,Y) from canvas coordinates (x,y), do the following:
- *
- * X = x - xOrigin;
- * Y = y - yOrigin;
- */
-
- int xOrigin, yOrigin; /* Canvas coordinates corresponding to
- * upper-left corner of window, given in
- * canvas pixel units. */
- int drawableXOrigin, drawableYOrigin;
- /* During redisplay, these fields give the
- * canvas coordinates corresponding to
- * the upper-left corner of the drawable
- * where items are actually being drawn
- * (typically a pixmap smaller than the
- * whole window). */
-
- /*
- * Information used for event bindings associated with items.
- */
-
- Tk_BindingTable bindingTable;
- /* Table of all bindings currently defined
- * for this canvas. NULL means that no
- * bindings exist, so the table hasn't been
- * created. Each "object" used for this
- * table is either a Tk_Uid for a tag or
- * the address of an item named by id. */
- Tk_Item *currentItemPtr; /* The item currently containing the mouse
- * pointer, or NULL if none. */
- double closeEnough; /* The mouse is assumed to be inside an
- * item if it is this close to it. */
- XEvent pickEvent; /* The event upon which the current choice
- * of currentItem is based. Must be saved
- * so that if the currentItem is deleted,
- * can pick another. */
-
- /*
- * Information used for managing scrollbars:
- */
-
- char *xScrollCmd; /* Command prefix for communicating with
- * horizontal scrollbar. NULL means no
- * horizontal scrollbar. Malloc'ed*/
- char *yScrollCmd; /* Command prefix for communicating with
- * vertical scrollbar. NULL means no
- * vertical scrollbar. Malloc'ed*/
- int scrollX1, scrollY1, scrollX2, scrollY2;
- /* These four coordinates define the region
- * that is the 100% area for scrolling (i.e.
- * these numbers determine the size and
- * location of the sliders on scrollbars).
- * Units are pixels in canvas coords. */
- char *regionString; /* The option string from which scrollX1
- * etc. are derived. Malloc'ed. */
- int scrollIncrement; /* The number of canvas units that the
- * picture shifts when a scrollbar up or
- * down arrow is pressed. */
-
- /*
- * Information used for scanning:
- */
-
- int scanX; /* X-position at which scan started (e.g.
- * button was pressed here). */
- int scanXOrigin; /* Value of xOrigin field when scan started. */
- int scanY; /* Y-position at which scan started (e.g.
- * button was pressed here). */
- int scanYOrigin; /* Value of yOrigin field when scan started. */
-
- /*
- * Information used to speed up searches by remembering the last item
- * created or found with an item id search.
- */
-
- Tk_Item *hotPtr; /* Pointer to "hot" item (one that's been
- * recently used. NULL means there's no
- * hot item. */
- Tk_Item *hotPrevPtr; /* Pointer to predecessor to hotPtr (NULL
- * means item is first in list). This is
- * only a hint and may not really be hotPtr's
- * predecessor. */
-
- /*
- * Miscellaneous information:
- */
-
- Cursor cursor; /* Current cursor for window, or None. */
- double pixelsPerMM; /* Scale factor between MM and pixels;
- * used when converting coordinates. */
- int flags; /* Various flags; see below for
- * definitions. */
- int nextId; /* Number to use as id for next item
- * created in widget. */
- } Tk_Canvas;
-
- /*
- * Flag bits for canvases:
- *
- * REDRAW_PENDING - 1 means a DoWhenIdle handler has already
- * been created to redraw some or all of the
- * canvas.
- * REPICK_NEEDED - 1 means DisplayCanvas should pick a new
- * current item before redrawing the canvas.
- * GOT_FOCUS - 1 means the focus is currently in this
- * widget, so should draw the insertion cursor.
- * CURSOR_ON - 1 means the insertion cursor is in the "on"
- * phase of its blink cycle. 0 means either
- * we don't have the focus or the cursor is in
- * the "off" phase of its cycle.
- * BUTTON_DOWN - 1 means that a button is currently down;
- * this is used to implement grabs for the
- * duration of button presses.
- * UPDATE_SCROLLBARS - 1 means the scrollbars should get updated
- * as part of the next display operation.
- */
-
- #define REDRAW_PENDING 1
- #define REPICK_NEEDED 2
- #define GOT_FOCUS 4
- #define CURSOR_ON 8
- #define BUTTON_DOWN 0x10
- #define UPDATE_SCROLLBARS 0x20
-
- /*
- * Records of the following type are used to describe a type of
- * item (e.g. lines, circles, etc.) that can form part of a
- * canvas widget.
- */
-
- typedef int Tk_ItemCreateProc _ANSI_ARGS_((Tk_Canvas *canvasPtr,
- Tk_Item *itemPtr, int argc, char **argv));
- typedef int Tk_ItemConfigureProc _ANSI_ARGS_((Tk_Canvas *canvasPtr,
- Tk_Item *itemPtr, int argc, char **argv, int flags));
- typedef int Tk_ItemCoordProc _ANSI_ARGS_((Tk_Canvas *canvasPtr,
- Tk_Item *itemPtr, int argc, char **argv));
- typedef void Tk_ItemDeleteProc _ANSI_ARGS_((Tk_Item *itemPtr));
- typedef void Tk_ItemDisplayProc _ANSI_ARGS_((Tk_Canvas *canvasPtr,
- Tk_Item *itemPtr, Drawable dst));
- typedef double Tk_ItemPointProc _ANSI_ARGS_((Tk_Canvas *canvasPtr,
- Tk_Item *itemPtr, double *pointPtr));
- typedef int Tk_ItemAreaProc _ANSI_ARGS_((Tk_Canvas *canvasPtr,
- Tk_Item *itemPtr, double *rectPtr));
- typedef void Tk_ItemPostscriptProc _ANSI_ARGS_((Tk_Canvas *canvasPtr,
- Tk_Item *itemPtr));
- typedef void Tk_ItemScaleProc _ANSI_ARGS_((Tk_Canvas *canvasPtr,
- Tk_Item *itemPtr, double originX, double originY,
- double scaleX, double scaleY));
- typedef void Tk_ItemTranslateProc _ANSI_ARGS_((Tk_Canvas *canvasPtr,
- Tk_Item *itemPtr, double deltaX, double deltaY));
- typedef int Tk_ItemIndexProc _ANSI_ARGS_((Tk_Canvas *canvasPtr,
- Tk_Item *itemPtr, char *indexString,
- int *indexPtr));
- typedef void Tk_ItemCursorProc _ANSI_ARGS_((Tk_Canvas *canvasPtr,
- Tk_Item *itemPtr, int index));
- typedef int Tk_ItemSelectionProc _ANSI_ARGS_((Tk_Canvas *canvasPtr,
- Tk_Item *itemPtr, int offset, char *buffer,
- int maxBytes));
- typedef int Tk_ItemInsertProc _ANSI_ARGS_((Tk_Canvas *canvasPtr,
- Tk_Item *itemPtr, int beforeThis, char *string));
- typedef int Tk_ItemDCharsProc _ANSI_ARGS_((Tk_Canvas *canvasPtr,
- Tk_Item *itemPtr, int first, int last));
-
- typedef struct Tk_ItemType {
- char *name; /* The name of this type of item, such
- * as "line". */
- int itemSize; /* Total amount of space needed for
- * item's record. */
- Tk_ItemCreateProc *createProc; /* Procedure to create a new item of
- * this type. */
- Tk_ConfigSpec *configSpecs; /* Pointer to array of configuration
- * specs for this type. Used for
- * returning configuration info. */
- Tk_ItemConfigureProc *configProc; /* Procedure to call to change
- * configuration options. */
- Tk_ItemCoordProc *coordProc; /* Procedure to call to get and set
- * the item's coordinates. */
- Tk_ItemDeleteProc *deleteProc; /* Procedure to delete existing item of
- * this type. */
- Tk_ItemDisplayProc *displayProc; /* Procedure to display items of
- * this type. */
- int alwaysRedraw; /* Non-zero means displayProc should
- * be called even when the item has
- * been moved off-screen. */
- Tk_ItemPointProc *pointProc; /* Computes distance from item to
- * a given point. */
- Tk_ItemAreaProc *areaProc; /* Computes whether item is inside,
- * outside, or overlapping an area. */
- Tk_ItemPostscriptProc *postscriptProc;
- /* Procedure to write a Postscript
- * description for items of this
- * type. */
- Tk_ItemScaleProc *scaleProc; /* Procedure to rescale items of
- * this type. */
- Tk_ItemTranslateProc *translateProc;/* Procedure to translate items of
- * this type. */
- Tk_ItemIndexProc *indexProc; /* Procedure to determine index of
- * indicated character. NULL if
- * item doesn't support indexing. */
- Tk_ItemCursorProc *cursorProc; /* Procedure to set cursor position
- * to just before a given position. */
- Tk_ItemSelectionProc *selectionProc;/* Procedure to return selection (in
- * STRING format) when it is in this
- * item. */
- Tk_ItemInsertProc *insertProc; /* Procedure to insert something into
- * an item. */
- Tk_ItemDCharsProc *dCharsProc; /* Procedure to delete characters
- * from an item. */
- struct Tk_ItemType *nextPtr; /* Used to link types together into
- * a list. */
- } Tk_ItemType;
-
- /*
- * Macros to transform a point from double-precision canvas coordinates
- * to integer pixel coordinates in the pixmap where redisplay is being
- * done.
- */
-
- #define SCREEN_X(canvasPtr, x) \
- (((int) ((x) + 0.5)) - (canvasPtr)->drawableXOrigin)
- #define SCREEN_Y(canvasPtr, y) \
- (((int) ((y) + 0.5)) - (canvasPtr)->drawableYOrigin)
-
- /*
- * Canvas-related variables that are shared among Tk modules but not
- * exported to the outside world:
- */
-
- extern Tk_CustomOption tkCanvasTagsOption;
-
- /*
- * Canvas-related procedures that are shared among Tk modules but not
- * exported to the outside world:
- */
-
- extern void TkBezierScreenPoints _ANSI_ARGS_((Tk_Canvas *canvasPtr,
- double control[], int numSteps,
- XPoint *xPointPtr));
- extern void TkFillPolygon _ANSI_ARGS_((Tk_Canvas *canvasPtr,
- double *coordPtr, int numPoints, Drawable drawable,
- GC gc));
- extern int TkGetCanvasCoord _ANSI_ARGS_((Tk_Canvas *canvasPtr,
- char *string, double *doublePtr));
- extern void TkIncludePoint _ANSI_ARGS_((Tk_Canvas *canvasPtr,
- Tk_Item *itemPtr, double *pointPtr));
- extern int TkMakeBezierCurve _ANSI_ARGS_((Tk_Canvas *canvasPtr,
- double *pointPtr, int numPoints, int numSteps,
- XPoint xPoints[], double dblPoints[]));
-
- #endif /* _TKCANVAS */
-